package com.linzm.creationaltype.singleton03;

/**
 * @Author zimingl
 * @Date 2023/4/15 20:28
 * @Description: 1)Double-Check 概念是多线程开发中常使用到的，如代码中所示，我们进行了两次 if (singleton == null)检查，这样就可以保证线程安全了。
 * 2)这样，实例化代码只用执行一次，后面再次访问时，判断 if (singleton == null)，直接 return 实例化对象，也避免的反复进行方法同步.
 * 3)线程安全；延迟加载；效率较高
 * 4)结论：在实际开发中，推荐使用这种单例设计模式
 */
public class Singleton2 {
    // 1 私有化构造器
    private Singleton2() {
    }

    // 2 new 对象
    private static class SingletonInstance {
        private final static Singleton2 S = new Singleton2();
    }

    // 3 返回对象
    public static Singleton2 getInstance() {
        return SingletonInstance.S;
    }
}
